Variable rate speech data compression

ABSTRACT

A device is presented that includes an encoder. The encoder compresses a plurality of signals at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual signal quality. Also presented is a device that includes a decoder. The decoder decompresses a plurality of compressed signals at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual signal quality.

BACKGROUND OF THE INVENTION

[0001] 1. Field of the Invention

[0002] The present invention relates to processing of digitized speech and more particularly to compression of voice data to reduce bandwidth required to transmit the speech over digital transmission media while preserving perceptual speech quality. 2. Background of the Art

[0003] With the current growth of digital transmission and the convergence of voice and data networks world-wide, digitized speech signals place increasing bandwidth burdens on digital networks. Existing fixed and variable rate speech compression techniques suffer from poor speech quality in the reconstructed speech and lack the flexibility to adapt dynamically to changing network bandwidth constraints.

[0004] Contemporary digital transmission environments beneficially accommodating variable data rates include multi-channel long-haul telecom, and voice over Internet Protocol (IP) applications.

[0005] The current trend in IP networks toward a quality-of-service (QoS) based rate structure is supported to only limited extents by existing voice compression systems, which generally offer a limited range of data rates and output speech quality.

SUMMARY

[0006] The invention relates to a device that includes an encoder. The encoder compresses a plurality of signals at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual signal quality.

[0007] Also the invention relates to a device that includes a decoder. The decoder decompresses a plurality of compressed signals at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual signal quality.

BRIEF DESCRIPTION OF THE DRAWINGS

[0008] The invention is illustrated by way of example and not by way of limitation in the figures of the accompanying drawings in which like references indicate similar elements. It should be noted that references to “an” or “one” embodiment in this disclosure are not necessarily to the same embodiment, and such references mean at least one.

[0009]FIG. 1 illustrates a block diagram of an embodiment of the invention having a Variable Rate Speech Encoder.

[0010]FIG. 2 illustrates a block diagram of one embodiment of a Variable Rate Speech Decoder.

[0011]FIG. 3 illustrates a signal flow diagram of an Epoch Locator portion of the Encoder illustrated in FIG. 1.

[0012]FIG. 4 illustrates a signal flow diagram of Primary Epoch Analysis operations in the Encoder illustrated in FIG. 1.

[0013]FIG. 5 illustrates a signal flow diagram of a Secondary Epoch Analysis portion of the Encoder illustrated in FIG. 1.

[0014]FIG. 6 illustrates a signal flow diagram of an Excitation Generator portion of the Decoder illustrated in FIG. 2.

[0015]FIG. 7 illustrates a signal flow diagram of Synthesizing Filter segments of the Decoder illustrated in FIG. 2.

[0016]FIG. 8 illustrates a signal flow diagram of an embodiment having Output Scaling and Filtering portions of the Decoder illustrated in FIG. 2.

[0017]FIG. 9 illustrates a structure of a bit stream sent over a digital channel.

DETAILED DESCRIPTION OF AN EMBODIMENT

[0018] The invention generally relates to the efficient transmission of digitized speech while preserving perceptual speech quality. This is accomplished by using an Encoder at the transmitting end and Decoder at the receiving end of a digital transmission medium. Referring to the figures, exemplary embodiments of the invention will now be described. The exemplary embodiments are provided to illustrate the invention and should not be construed as limiting the scope of the invention.

[0019]FIG. 1 illustrates a block diagram of an Encoder in one embodiment of the invention. The Encoder comprises Epoch Locator unit 10 to identify segments of an input signal for further analysis, Primary 30 and Secondary 50 Analysis units to extract parameters that describe signal segments and associate a priority value with each parameter, and Frame Assembly unit 60 to prepare the parameters for transmission.

[0020] While the following discussion relates to the variable rate transmission and reception of compressed speech signals over a digital transmission medium, one should note that other types of signals can benefit from the embodiments of the invention also, such as audio associated with video streaming signals. In a transmitting telephone, an input channel of speech generally originates as an analog signal. In one embodiment, this signal is converted to a digital format (by an Analog to Digital converter) and presented to the Encoder. The conversion from analog to digital formats may take place in the immediate physical vicinity of the Encoder, or digital signals may be forwarded (e.g. over the Public Switched Telephone Network (PSTN)) from remote locations to the Encoder. When encoding (compressing) a given channel of digitized speech, frames of output (channel) data appear at the output of the Encoder at a variable rate that is determined by activity in the input audio signal. In one embodiment, each frame of data sent to the digital transmission medium consists of an encoding of (typically) 15 parameters describing an epoch (segment) of the input audio signal.

[0021] The Encoder compresses speech at a variable rate, which allocates available bandwidth to those portions of the digital signal that are most significant perceptually. The parameters that describe an epoch are ordered from most important to least important in their influence on perceived speech quality and a Priority Value is associated with each parameter detailing its importance in the current audio context for reconstructed speech audio quality. The priority flags are not sent to the receiving end, but are used in one of two ways:

[0022] (1) Other systems, external to the present invention, which manage the traffic over the digital medium may use the Priority Values to drop parameters from the transmitted bit stream thus further reducing bandwidth with minimal impact on speech quality.

[0023] (2) Other systems, external to the present invention, which manage the traffic over the digital medium may signal the present invention to use the Priority Values to drop parameters from its output bit stream thus further reducing bandwidth with minimal impact on speech quality.

[0024] In situations in which the Encoder and traffic management systems are physically co-located or share a high bandwidth interface, it may be advantageous to employ the first method. Such systems include the Network Manager scenario described in copending patent application entitled TELECOMMUNICATION DATA COMPRESSION Ser. No._______filed on ________. In situations in which the Encoder and traffic management systems are not physically co-located or share only a low bandwidth interface, it may be advantageous to employ the second approach. Such systems include cellular telephone networks in which the Encoder would advantageously reside in the end user's cellular telephone while network traffic management functions would be performed centrally or at the cell level in the network.

[0025]FIG. 3 illustrates signal flow in Epoch Locator 10. In one embodiment Epoch Locator 10 identifies segments (epochs) in input speech that correspond to individual periods of a speaker's pitch. During intervals of voiced speech (when the speaker's vocal chord is vibrating and sending pulses of air at a regular rate into the upper vocal tract, either real-time or synthesized) Epoch Locator 10 identifies the points at which these pulses occur. During intervals of unvoiced speech (when the vocal chords are not active or synthesized speech is not active) Epoch Locator 10 identifies random segments for analysis. The identification of the putative pulse locations involves detecting sudden increases in relative signal energy. The Epoch Locator signal flow described here is a modification of the pitch tracking described in U.S. Pat. Nos. 4,980,917 and 5,208,897.

[0026] Illustrated in FIG. 3, Full Wave Rectifier 11 operates on the Input Audio Signal time series, {S_(n)}, by taking the mathematical absolute value to produce the time series {|S_(n)|} in one embodiment. The time series or signal {S_(n)} is assumed to represent a standard PSTN speech signal sampled at 8,000 samples per second and converted from the PSTN standard of Mu-law or A-law encoding to a linear 12 bit format. In one embodiment, Cube and Smooth Operations 12 operate on {|S_(n)|} to produce the time series {Y_(n)} according to the following equation:

Y _(n)=(15*Y _(n−1)+(Minimum(2047, |S _(n)|)³)/2048)/16  (Eq. 1)

[0027] In one embodiment, Log2 operation 13 operates on {Y_(n)} to produce {y_(n)} according to the following equation:

y _(n)=32*Log2(Y _(n))  (Eq. 2)

[0028] In one embodiment, Difference Over 11 Samples Operation 14 operates on {y_(n)} to produce {D_(n)} according to the following equation:

D _(n) =y _(n)−(y _(n−1) +y _(n−2) +y _(n−3) +y _(n−4) +y _(n−5) +y _(n−6) +y _(n−7) +y _(n−8) +y _(n−9) +y _(n−10))/10  (Eq. 3)

[0029] In one embodiment, Clamp and Smooth When Falling operation 15 operates on {D_(n)} to produce {x_(n)} according to the following equations:

D′ _(n)=Maximum(Minimum(64, D _(n)),−128)

[0030] $\begin{matrix} \begin{matrix} \begin{matrix} {\quad \begin{matrix} \left\{ {\left( {{4*D_{n}^{\prime}} + {7*x_{n - 1}^{\prime}}} \right)/8} \right. & {\quad {{{if}\quad 4*D_{n}^{\prime}} < {x_{n - 1}^{\prime}\quad {and}\quad x_{n - 1}^{\prime}} > 32}\quad} \end{matrix}} \\ {x_{n}^{\prime} = \quad \begin{matrix} \left\{ {\left( {{4*D_{n}^{\prime}} + {15*x_{n - 1}^{\prime}}} \right)/16} \right. & {\quad {{{if}\quad 4*D_{n}^{\prime}} < {x_{n - 1}^{\prime}\quad {and}\quad x_{n - 1}^{\prime}}<=32}} \end{matrix}} \\ {\quad \begin{matrix} \left\{ {4*D_{n}^{\prime}} \right. & {\quad {{{if}\quad 4*D_{n}^{\prime}}>=x_{n - 1}^{\prime}}} \end{matrix}} \end{matrix} \\ {{x_{n} = {x_{n}^{\prime}/4}}\quad} \end{matrix} & \left( {{Eq}.\quad 4} \right) \end{matrix}$

[0031] In one embodiment, Local Maximum Follower 16 operates on {x_(n)} to produce {M_(n)} according to the following equations: $\begin{matrix} {\begin{matrix} {{{{If}\quad x_{n}} > M_{n - 1}^{\prime}}\quad} \\ {\quad {M_{n}^{\prime} = x_{n}}} \\ {\quad {M_{n}^{''} = {{16*M_{n}^{\prime}} + 8}}} \\ {{{{If}\quad x_{n}}<=M_{n - 1}^{\prime}}\quad} \\ {\quad {M_{n}^{\prime} = {M_{n - 1}^{''}/16}}} \\ {\quad {M_{n}^{''} = {M_{n - 1}^{''} - M_{n}^{\prime}}}} \\ {M_{n} = \quad \left\{ {{M_{n}^{\prime}\quad {if}\quad M_{n}^{\prime}}>=1} \right.} \\ {\quad \left\{ {{1\quad {if}\quad M_{n}^{\prime}} < 1} \right.} \end{matrix}\quad} & \left( {{Eq}.\quad 5} \right) \end{matrix}$

[0032] In one embodiment, Difference Over 5 Samples operation 17 operates on {M_(n)} to produce {t_(n)} according to the following equation:

t _(n) =M _(n)−[(M _(n−1) +M _(n−2) +M _(n−3) +M _(n−4))/4]−3  (Eq. 6)

[0033] The signal {t_(n)} generally shows sharp positive going peaks at the pulse locations. The signal {t_(n)} is stored in Trigger Buffer 18 for later use as the primary driver of Epoch Triggering Logic 25.

[0034] The raw indications of possible pulse locations reflected in Trigger Buffer 18 are subject to errors as a result of noise in the input signal. To counter the effect of the noise on pulse location accuracy, in one embodiment an Average Magnitude Difference Function (AMDF) is computed once every 64 samples. The nulls in this function occur at points that correspond to strong periodicities in the input signal. In one embodiment, prior to computing the AMDF the input audio signal {S_(n)} is subjected to Low Pass Filter 19 to produce a signal {Z_(n)} according to the following equations:

z′ _(n)=0.5928955*S _(n)+0.0849914*z′ _(n−1)+0.5928955*S _(n−1)

z″ _(n)=0.8*z′ _(n)

z′″ _(n)=0.5928955*z″ _(n)+0.0849914*z′″ _(n−1)+0.5928955*z″ _(n−1)

z _(n)=0.8*z′″ _(n)  (Eq. 7)

[0035] The AMDF function values to be used while processing triggers for samples N to N+63 are computed from {Z_(n)} as 49 values {a′_(k):k=0,1,2, . . . 48} as follows: $\begin{matrix} {a_{k} = {\sum\limits_{j = 0}^{49}\left| {Z_{N + j - {{halflag}{(k)}} + 2} - Z_{N + j + {{halflag}{(k)}} + 2}} \right|}} & \left( {{Eq}.\quad 8} \right) \end{matrix}$

[0036] where in one embodiment, halflag( ) is given by Table 1. TABLE 1 k 0 1 2 3 4 5 6 7 8 9 halflag (k) 8 9 10 11 12 13 14 15 16 17 k 10 11 12 13 14 15 16 17 18 19 halflag (k) 18 19 20 21 22 23 24 25 26 27 k 20 21 22 23 24 25 26 27 28 29 halflag (k) 28 29 30 31 32 34 36 38 40 42 k 30 31 32 33 34 35 36 37 38 39 halflag (k) 44 46 48 50 52 54 56 58 60 62 k 40 41 42 43 44 45 46 47 48 halflag (k) 64 68 72 76 80 84 88 92 96

[0037] The values of halflag( ) are roughly uniformly spaced on a logarithmic scale. The actual lag values used in the AMDF are 2*halflag( ) and span the range from 16 to 192. The range of 16 samples to 192 samples corresponds to possible pitch frequencies of 500 Hz down to 41.7 Hz at the 8,000 Hz sampling rate.

[0038] In one embodiment, the Raw AMDF {a′_(k)} is then normalized to produce {a_(k)} as follows:

MaxMag=Maximum({a′ _(k)})

MinMag=Minimum({a′ _(k)})

Range=MaxMag−MinMag

a _(k)=(10*(a′ _(k)−MinMag))/Range for k=0,1, . . . ,48  (Eq. 9)

[0039] The Normalized AMDF {a_(k)} has values ranging from 0 to 10 with the zeroes or nulls at points corresponding to the lags (frequencies) exhibiting the most pronounced periodicities in the low pass filtered version of the input signal. The null point with the lowest index (highest frequency) is then widened by setting the two neighboring points on either side to zero. By definition the first null begins at index p and extends to index q that is

[0040] a_(k)=0 for k in p to q

[0041] and

[0042] a_(k)>0 for k<p

[0043] The null is widened by the following operation:

a _(p−1)=0 if p>0

a _(p−2)=0 if q>1

a _(q+1)=0 if q<47

a _(q+2)=0 if q<46  (Eq. 10)

[0044] In one embodiment Extrapolate to Linear Time Scale operation 21 is then performed to construct an AMDF approximation {A_(k); k=0,1, . . . ,219} on all possible lag values from 0 to 200 with the following operation (expressed in C programming code):

k=0;

for(j=0;j<221;j++)

{

if((j>2*halflag(k))&&(k<48))k++;

A[j]=a[k];

}  (Eq. 11)

[0045] The AMDF approximation {A_(k); k=0,1, . . . ,220} is then written to AMDF Buffer 22 for use in Epoch Triggering Logic 25.

[0046] In one embodiment Epoch Trigger Logic 25 also employs an RMS (root mean square) estimate {erms_(n)} computed from a High Pass Filtered version of the Input Signal {S_(n)}. High Pass Filter 23 computes a signal {p_(n)} from {S_(n)} as follows:

p _(n)0.8333*(S _(n) −S _(n−1)+0.4*S _(n−2))  (Eq. 12)

[0047] In one embodiment Estimate RMS function 24 computes±terms_(n)}from {p_(n)} according to the following equation:

erms _(n)=(127*erms _(n−1) +p _(n))128  (Eq. 13)

[0048] Epoch Triggering Logic 25 examines the trigger buffer and the AMDF approximation in the AMDF buffer to determine if the start of a new Epoch should be declared at a point, n, in time where n falls in the range N to N+63 to be used with the current contents of the AMDF buffer computed as in Eq. 8 above. In the Epoch Triggering Logic a variable, PeriodSize, is defined as the time in samples since the most recent trigger (epoch start). In one embodiment two trigger signals are considered. The first is simply the trigger signal recorded in Trigger Buffer 18; the second is the value from Trigger Buffer 18 plus 2 and minus the corresponding value from AMDF Buffer 22. The operation of adjusting by the AMDF value serves to pull down spurious triggers which do not correspond to strong periodicities in the input signal. The Epoch Triggering Logic computes these two trigger signals for the current point n and for 19 points (n+j; j=1 to 19) in the future. If a trigger point appears in the near future that is stronger than the current point, triggering at the current point is suppressed to wait for the stronger trigger. To this end the following computations are performed to construct arrays of the trigger values {tr_(k); k=0 to 19} and adjusted trigger values {ta_(k);k=0 to 19} for the current point and 19 points in the future, recalling from Eq. 6 that Trigger Buffer 18 contains the signal {t_(n)} and from Eq. 11 that the AMDF Buffer contains the signal {A_(k); k−0 to 220}:

tr _(k) =t _(n+k) for k=0 to 19

ta _(k) =t _(n+k)+2−A _(PeriodSize+k) for k=0 to 19

Maxtr=Maximum(tr _(k))

Maxta=Maximum(ta _(k))  (Eq. 14)

[0049] In one embodiment triggering (declaring the start of a new epoch) occurs when the following conditions are met:

[0050] PeriodSize=200 OR

[0051] ((Maxtr<=tr₀+5 OR Maxta<=ta₀) AND (tr₀>4 OR ta₀>=0) AND

[0052] PeriodSize>=16)

[0053] When triggering occurs an addition is made to the next available space in Epoch Log 26 to record the location, n, at which the trigger occurred, the time, PeriodSize, since the previous trigger (the Epoch Length), and the value of estrms_(n) as computed in Eq. 13.

[0054] In one embodiment whenever the current value of PeriodSize plus the sum of the Epoch Lengths in the Raw Epoch Log exceeds 344 samples, Epoch Smoothing and Combining operation 27 is activated. Epoch Smoothing and Combining 27 creates Epoch Log 28 from Raw Epoch Log 26 by examining and modifying the first few entries in Raw Epoch Log 26 and then dispatching the first Epoch in Epoch Log 28 to Primary Epoch Analysis unit 30.

[0055] By definition Raw Epoch Log 26 is a structure with N entries and three fields: Location, Length, and EstRms, that is:

[0056] RawEpochLog.Location_(k) for k=0,1, . . . , N−1

[0057] RawEpochLog.Length_(k) for k=0,1, . . . , N−1

[0058] RawEpochLog.EstRms_(k) for k=0,1, . . . , N−1

[0059] Epoch Log 28 is a similar structure that is initially set equal to Raw Epoch Log 26, that is:

EpochLog.Location_(k)=RawEpochLog.Location_(k) for k=0,1, . . . , N−1

EpochLog.Length_(k)=RawEpochLog.Length_(k) for k=0,1, . . . , N−1

EpochLog.EstRms_(k)=RawEpochLog.EstRms_(k) for k=0,1, . . . ,N−1  (Eq. 15)

[0060] In one embodiment Epoch Smoothing and Combining 27 comprises 6 operations, the first two of which are designed to enhance speech quality by smoothing (correcting presumed errors) in successive Epoch Lengths, the next 3 of which are designed to combine epochs in the interest of reducing channel bit rate by reducing frame rate, and the last one of which enhances quality by extending the epoch length pattern indicative of voiced speech for a short distance into the following unvoiced speech area. Each operation operates on and potentially modifies Epoch Log 28 as constructed in Eq. 15 above.

[0061] In one embodiment in one operation of Epoch Smoothing missed triggers are hypothesized and inserted into the log. The conditions for executing this operation are:

[0062] EpochLog.Length₁<200 AND

[0063] NearTo(EpochLog.Length₀, EpochLog.Length₁/2, 1.3) AND

[0064] NearTo(EpochLog.Length₂, EpochLog.Length₁/2, 1.3)

[0065] Where the function NearTo(a,b,z) is defined as follows:

[0066] NearTo(a,b,z)={True if Max(a,b)/Min(a,b)<=z

[0067] {False otherwise

[0068] When these conditions are met the following modifications are performed to split the second log entry into two entries:

[0069] Shift log entries with indicies>=21 slot higher

[0070] EpochLog.Length₂=EpochLog.Length₁/2

[0071] EpochLog.Length₁=EpochLog.Length₁−EpochLog.Length₂

[0072] EpochLog.EstRms₂=EpochLog.EstRms₁

[0073] EpochLog.Location₂=EpochLog.Location₁

[0074] EpochLog.Location₁=EpochLog.Location₀+EpochLog.Length₁

[0075] N=N+1

[0076] In another operation of Epoch Smoothing, assumed false triggers are removed and combined with neighboring epochs. The conditions for executing this operation are:

[0077] EpochLog.Length₁+EpochLog.Length₂<200 AND

[0078] NearTo(EpochLog.Length₀, EpochLog.Length₁+EpochLog.Length₂, 1.3) AND

[0079] NearTo(EpochLog.Length₃, EpochLog.Length₁+EpochLog.Length₂, 1.3)

[0080] When these conditions are met the following modifications are performed to combine the epochs at indices 1 and 2 into a single epoch:

[0081] EpochLog.Length₁₌EpochLog.Length₁+EpochLog.Length₂

[0082] EpochLog.Location₁₌EpochLog.Location₂

[0083] Shift log entries with indicies>=2 1 slot lower

[0084] N=N−1

[0085] In one operation of Epoch Combining two short Epochs of similar length and any amplitude are combined into a single long epoch that is labeled by the system as a double epoch. The conditions for executing this operation are:

[0086] EpochLog.Length₀<=50 AND EpochLog.Length₁<=50 AND

[0087] (|EpochLog.Length₀−EpochLog.Length₁|<=2)

[0088] When these conditions are met the following modifications are performed to combine the epochs with indices 0 and 1 into one epoch that is flagged as a Double Epoch by the addition of 200 to its length:

[0089] EpochLog.Length₀=200+EpochLog.Length₀+EpochLog.Length₁

[0090] EpochLog.Location₀=EpochLog.Location₁

[0091] Shift log entries with indicies>=1 one slot lower

[0092] N=N−1

[0093] In another operation of Epoch Combining two short Epochs of dissimilar length and low amplitude are combined into a single long epoch that is labeled by the system as a Double Epoch. The conditions for executing this operation are:

[0094] EpochLog.Length₀+EpochLog.Length₁<=100 AND

[0095] EpochLog.EstRms₀<=60 AND EpochLog.EstRms₁<=60

[0096] When these conditions are met the following modifications are performed to combine the epochs with indices 0 and 1 into one epoch that is flagged as a Double Epoch by the addition of 200 to its length:

[0097] EpochLog.Length₀=200+EpochLog.Length₀+EpochLog.Length₁

[0098] EpochLog.Location₀=EpochLog.Location₁

[0099] Shift log entries with indicies>=1 one slot lower

[0100] N=N−1

[0101] In another operation of Epoch Combining two medium length Epochs of similar or dissimilar length, low amplitude, and presumed unvoiced speech are combined into a single long epoch that is not labeled as a double epoch. This operation is repeated one more time to provide more combining and hence more data rate reduction. The conditions for executing this operation employ the variable Previous_rc1 which is exported from Primary Epoch Analysis unit 30. They are:

[0102] EpochLog.Length₀+EpochLog.Length₁<=200 AND

[0103] EpochLog.EstRms₀<=60 AND EpochLog.EstRms₁<=60 AND

[0104] Previous_rc1<0

[0105] When these conditions are met the following modifications are performed:

[0106] EpochLog.Length₀=EpochLog.Length₀+EpochLog.Length₁

[0107] EpochLog.Location₀=EpochLog.Location₁

[0108] Shift log entries with indicies>=1 one slot lower

[0109] N=N−1

[0110] In another operation of Epoch Smoothing and Combining short epochs are duplicated and extended into a following region with Epoch Length=200, which is indicative of an absence of triggers. The conditions for executing this operation are:

[0111] EpochLog.Length₁=200 AND

[0112] (EpochLog.Length₀<80 OR EpochLog.Length₀>200)

[0113] When these conditions are met the following modifications are performed:

[0114] If EpochLog.Length₁<50

[0115] Shift log entries with indicies>=1 three slots higher

[0116] EpochLog.Length₁=EpochLog.Length₀

[0117] EpochLog.Length₂=EpochLog.Length₀

[0118] EpochLog.Length₃=EpochLog.Length₀

[0119] EpochLog.Length₄=200−3*EpochLog.Length₀

[0120] EpochLog.Location₁=EpochLog.Location₀+EpochLog.Length₁

[0121] EpochLog.Location₂=EpochLog.Location₁+EpochLog.Length₂

[0122] EpochLog.Location₃=EpochLog.Location₂+EpochLog.Length₃

[0123] EpochLog.Location₄=EpochLog.Location₃+EpochLog.Length₄

[0124] EpochLog.EstRms₁=EpochLog.EstRms₄

[0125] EpochLog.EstRms₂=EpochLog.EstRms₄

[0126] EpochLog.EstRms₃=EpochLog.EstRms₄

[0127] N=N+3

[0128] If EpochLog.Length₁<80

[0129] Shift log entries with indicies>=1 two slots higher

[0130] EpochLog.Length₁=EpochLog.Length₀

[0131] EpochLog.Length₂=EpochLog.Length₀

[0132] EpochLog.Length₃=200−2*EpochLog.Length₀

[0133] EpochLog.Location₁=EpochLog.Location₀+EpochLog.Length₁

[0134] EpochLog.Location₂=EpochLog.Location₁+EpochLog.Length₂

[0135] EpochLog.Location₃=EpochLog.Location₂+EpochLog.Length₃

[0136] EpochLog.EstRms₁=EpochLog.EstRms₃

[0137] EpochLog.EstRms₂=EpochLog.EstRms₃

[0138] N=N+2

[0139] If EpochLog.Length₁>200

[0140] Shift log entries with indicies>=1 one slot higher

[0141] EpochLog.Length₁=EpochLog.Length₀

[0142] EpochLog.Length₂=200−(EpochLog.Length₀−200)

[0143] EpochLog.Location₁=EpochLog.Location₀+(EpochLog.Length₁−200)

[0144] EpochLog.Location₂=EpochLog.Location₁+EpochLog.Length₂

[0145] EpochLog.EstRms₁=EpochLog.EstRms₂

[0146] N=N+1

[0147] In one embodiment, at the conclusion of Epoch Smoothing and Combining function 27 the values of EpochLog.Location₀ and EpochLog.Length₀ are passed to Primary Epoch Analysis unit 30. After the Primary and Secondary Epoch Analyses are completed all of the entries in EpochLog 28 are copied to RawEpochLog 26, the entry with index 0 is removed from the RawEpochLog (other entries are shifted one slot lower to fill the space and the length of the log is reduced by one). Processing then resumes with the next speech sample at the top left of the Epoch Locator illustrated in FIG. 3.

[0148] Primary Epoch Analysis unit 30 is illustrated in FIG. 4. In one embodiment the Differential Encoding of Epoch Length 31 operates on the Epoch Length value for the current frame and the Epoch Length value, Previous_Epoch_Length, from the previous frame to produce a 3-bit Differential Epoch Length value and in certain circumstances an 8-bit Encoded Epoch Length value created from the Epoch Length as follows: $\begin{matrix} {{{RawEL\_ difference} = {{{Epoch}\quad {Length}} - {{Previous\_ Epoch}{\_ Length}}}}{{{Differential}\quad {Epoch}\quad {Length}} = \left\{ {{{RawEL\_ difference} + {3\quad {if}} - 3} < {RawEL\_ difference} < {3\left\{ {{7\quad {otherwise}\# \quad {Bits}\quad {in}\quad {Differential}\quad {Epoch}\quad {Length}} = {{3\quad \quad \# \quad {Bits}\quad {in}\quad {Encoded}\quad {Epoch}\quad {Length}} = \left\{ {{0\quad {if}\quad {Differential}\quad {Epoch}\quad {Length}} < {7\quad \left\{ {{8\quad {otherwise}\text{}{Encoded}\quad {Epoch}\quad {Length}} = \left\{ {{{Epoch}\quad {Length}\quad {if}\quad 16}<={{Epoch}\quad {Length}}<={200\left\{ {{{{Epoch}\quad {Length}} - {231\quad {if}\quad 232}}<={{Epoch}\quad {Length}}<={246\left\{ {{{{Epoch}\quad {Length}} - {46\quad {if}\quad 247}}<={{Epoch}\quad {Length}}<=300} \right.}} \right.}} \right.} \right.}} \right.}} \right.}} \right.}} & \left( {{Eq}.\quad 16} \right) \end{matrix}$

[0149] The Differential Epoch Length, #Bits in Differential Epoch Length, and Priority=0 are sent to Frame Assembly unit 60 described below. The Encoded Epoch Length, #Bits in Encoded Epoch Length, and Priority=0 are also sent to Frame Assembly unit 60 described below.

[0150] In one embodiment an operation in the Primary Epoch Analysis unit 30 illustrated in FIG. 4 is High Pass Filter 23 which is the same as that illustrated in FIG. 3 and Eq. 12 with its output being the signal {p_(n)}. Select Epoch Samples function 32 uses the Epoch Location and Epoch Length provided by Epoch Smoothing and Combining function 27 to extract samples from {p_(n)} for analysis. Since the Epoch Length provided may have 200 added to it to flag a double epoch, an Actual_Epoch_Length is first constructed as:

[0151] Actual_Epoch_Length={Epoch Length if Epoch Length<200

[0152] {Epoch Length−200 otherwise

[0153] Then the raw epoch samples {e′_(k)} are selected from {p_(n)} to include the epoch defined by the input parameters plus 12 extra samples. The samples selected are offset by 5 samples from those defined by the input parameters to account for triggering typically occurring a few samples into the pulse that drives the epoch. {e′_(k)} is selected according to the following equation:

e′ _(k) =P _(EpochLocation+k−17−Actual) _(—) _(Epoch) _(—) _(Length)

for k=0,1, . . . ,Actual_Epoch_Length+11  (Eq. 17)

[0154] Compute and Remove Epoch Bias operation 33 operates as follows on the Raw Epoch Samples {e′_(k)} to produce the Bias Removed Epoch Samples {e_(k)} as follows: $\begin{matrix} {{d\quad c\quad b} = {\left( {\sum\limits_{k = 0}^{{{Actual\_ Epoch}{\_ Length}} + 11}e_{k}^{\prime}} \right)/\left( {{{Actual\_ Epoch}{\_ Length}} + 12} \right)}} & \left( {{Eq}.\quad 18} \right) \\ {{e_{k} = {{e_{k}^{\prime} - {d\quad c\quad b\quad {for}\quad k}} = 0}},1,\ldots \quad,{{{Actual\_ Epoch}{\_ Length}} + 11}} & \left( {{Eq}.\quad 19} \right) \end{matrix}$

[0155] Compute RMS operation 34 determines the RMS (root mean square) of the signal {e_(k)} as follows: $\begin{matrix} {{R\quad M\quad S} = \left\lbrack {\left( {\sum\limits_{k = 0}^{{{Actual\_ Epoch}{\_ Length}} - 1}{e_{k + 12}*e_{k + 12}}} \right)/\left( {{Actual\_ Epoch}{\_ Length}} \right)} \right\rbrack^{1/2}} & \left( {{Eq}.\quad 20} \right) \end{matrix}$

[0156] In one embodiment Log Encoding 35 of the RMS operates according to the following equation to produce the LogRMS as an integer in the range 0 to 31:

Log RMS−Integer(2.667* Log₂(RMS))  (Eq. 21)

LogRMS{31  if LogRMS>31

LogRMS otherwise (Eq. 22)  (Eq. 22)

[0157] In one embodiment Differential Encoding of the LogRMS 36 operates on the RMS value for the current frame and the LogRMS value, Previous_LogRMS, from the previous frame to produce a 2-bit Differential LogRMS value and in certain circumstances a 5-bit Absolute LogRMS value as follows: $\begin{matrix} {{{RawRMS\_ difference} = {{{Log}\quad {RMS}} - {Previous\_ LogRMS}}}{{{Differential}\quad {Log}\quad {RMS}} = \left\{ {{{RawRMS\_ difference} + {1\quad {if}} - 1} < {RawRMS\_ difference} < {1\left\{ {{3\quad {otherwise}\# \quad {Bits}\quad {in}\quad {Differential}\quad {Log}\quad {RMS}} = {{2\# \quad {Bits}\quad {in}\quad {Differential}\quad {Log}\quad {RMS}} = \left\{ {{0\quad {if}\quad {Differential}\quad {Log}\quad {RMS}} < {3\quad \left\{ {5\quad {otherwise}} \right.}} \right.}} \right.}} \right.}} & \left( {{Eq}.\quad 23} \right) \end{matrix}$

[0158] The Differential LogRMS, #Bits in Differential LogRMS, and Priority=0 are sent to Frame Assembly unit 60 described below. The Absolute LogRMS, #Bits in Absolute LogRMS, and Priority=0 are also sent to Frame Assembly unit 60 described below.

[0159] In one embodiment Compute Covariance Matrix operation 37 operates on the Bias Removed Epoch Samples {e_(k)} to create a 12×12 covariance matrix, PHI, and a 12×1 vector, PSI, for the current epoch. This operation is well-known prior art for which a discussion may be found in Deller, John R., Hansen, John H. L., Proakis, John G., Discrete Time Processing of Speech Signals, pp292-296, IEEE Press, New York, N.Y., 1993. Since the matrix PHI is symmetric about the diagonal, only the lower triangular half need be computed. The present invention implements this technique as follows: $\begin{matrix} {{{P\quad H\quad I_{r,c}} = \left( {\sum\limits_{k = 11}^{{{Actual\_ Epoch}{\_ Length}} + 10}{e_{k - c}*e_{k - r}}} \right)}{{{{for}\quad r} = 0},1,\ldots \quad,{{11\quad {and}\quad c} = 0},1,\ldots \quad,r}} & \left( {{Eq}.\quad 24} \right) \\ {{{P\quad S\quad I_{c}} = \left( {\sum\limits_{k = 12}^{{{Actual\_ Epoch}{\_ Length}} + 11}{e_{k - c - 1}*e_{k}}} \right)}{{{{for}\quad c} = 0},1,\ldots \quad,11}} & \left( {{Eq}.\quad 25} \right) \end{matrix}$

[0160] PHI and PSI are passed to Invert Matrix operation 38 which employs the iterative Choleski decomposition method to produce 12 Reflection Coefficients (RCs) according to the following procedure which is well-known prior art (see for example Deller, Hansen & Proakis, 1993, pp296-313). In this procedure the constant eps=0.0001 is used to detect a singular or near singular matrix which has no inverse. In this case the technique terminates prior to completing the computation of all 12 RCs and sets the remaining RCs to zero. The procedure is given in pseudo C programming code:  for(j=0; j<12; j++) { for(k=0; k<j; k++) { save = PHI[j][k] * PHI[k][k]; for(i=j; i<12; i++) PHI[i][j] = PHI[i][j] − PHL[i][k] * save; } if(|PHI[j][j] | < eps) break;  RC[j] = PSI[j];  for(k=0; k<j; k++) RC[j] = RC[j] − RC[k] * PHI[j][k];  PHI[j][j] = 1.0 / PHI[j][j];  RC[j] = RC[j] * PHI[j][j];  RC[j] = Minimum(0.986,RC[j]);  RC[j] = Maximum(−0.986,RC[j]); }

[0161] In one embodiment the resulting 12 RC values each lie in the range −0.986 to 0.986. These 12 RC values are passed to FrameType Logic 39 for determination of the type of channel quantization to use and to Quantize RCs process 40 for the actual channel encoding.

[0162] In one embodiment FrameType Logic 39 examines the current frame's LogRMS value and the value of RC₀ to determine if a full frame (12 RCs plus Residue Descriptor) or a half frame (6 RCs with no Residue Descriptor) should be forwarded to the Decoder. This distinction is made to conserve significant bandwidth at the cost of minor signal degradation at the Decoder output. In the absence of bandwidth constraints it would be desirable to use full frames for all output. Each frame is initially assumed to be a half frame. The condition for declaring a full frame in FrameType Logic 39 employs a constant RMSThold which for typical telephone digital signals is advantageously set to 20. Higher values may be used with a resultant loss of signal quality at the Decoder output. Lower values of RMSThold result in a higher channel bandwidth and increased signal quality at the Decoder output. The condition implemented for declaring a full frame type in FrameType Logic 39 is:

RC0>=0 AND LogRMS>RMSThold  (Eq. 26a)

[0163] Quantize RCs process 40 encodes the Raw RCs as created in Eq. 26 into integer values on limited ranges suitable for transmission with a minimal number of bits. Techniques for such a process are well-known in the prior art. See for example the discussion in O'Shaughnessy, Douglas, Speech Communication: Human and Machine, p. 356, Addison-Wesley, New York, N.Y., 1987.

[0164] In one embodiment the first two RCs (RC₀ and RC₁) are encoded by quantizing the log area ratios of the RCs rather than the RCs themselves. This log area ratio encoding provides more resolution when the RC values are near +1 or −1, the regions in which small changes in RC value have the greatest perceptual effects. The Log area ratio function is given as:

Lar _(j)=Log_(e)((1+RC _(j))/(1−RC,))  (Eq. 27)

[0165] The remaining RCs are encoded linearly from their Raw values. Quantize RCs process 40 computes both the encoded values {qv_(j), for j=0 to 11} for transmission and the reconstructed quantized RCs {qRC_(j)for j=0 to 11} that equal the RCs that will be reconstructed in the Decoder.

[0166] In one embodiment the Quantization process constrains each RC_(j) to a predetermined range given by the values HiClamp_(j) and LowClamp_(j) as shown in Table 2 below. TABLE 2 RC clamping limits j 0 1 2 3 HiClamp 0.986 0.986 0.9 0.9 LoClamp −0.986 −0.986 −0.9 −0.9 j 4 5 6 7 HiClamp 0.9 0.75 0.75 0.75 LoClamp −0.9 −0.9 −0.75 −0.75 j 8 9 10 11 HiClamp 0.75 0.75 0.7 0.7 LoClamp −0.75 −0.75 −0.7 −0.7

[0167] The number of bits used to encode each RC_(j) is a function of j and the frame type; full or half as shown in Table 3 below. TABLE 3 Bit Allocations for RCs J 0 1 2 3 BitsFull 7 7 6 6 BitsHalf 6 6 5 5 J 4 5 6 7 BitsFull 5 5 4 4 BitsHalf 4 4 0 0 J 8 9 10 11 BitsFull 4 4 3 3 BitsHalf 0 0 0 0

[0168] The Process for quantizing and encoding RC₀ and RC₁ is given below:

[0169] $\begin{matrix} \begin{matrix} {{RC}_{j} = \quad {{Maximum}\left( {{LoClamp}_{j},{RC}_{j}} \right)}} \\ {{RC}_{j} = \quad {{Minimum}\left( {{HiClamp}_{j},{RC}_{j}} \right)}} \\ {{qv}_{j} = \quad \left\{ {{{Integer}\left( {12.57*{Lar}_{j}} \right)}\quad {for}\quad {full}\quad {frames}} \right.} \\ {\quad \left\{ {{{Integer}\left( {6.285*{Lar}_{j}} \right)}\quad {for}\quad {half}\quad {frames}} \right.} \\ {a_{j} = \quad \left\{ {{\exp \left( {{qv}_{j}/12.57} \right)}\quad {for}\quad {full}\quad {frames}} \right.} \\ {\quad \left\{ {{\exp \left( {{qv}_{j}/6.285} \right)}\quad {for}\quad {half}\quad {frames}} \right.} \\ {{qRC}_{j} = \quad {\left( {a_{j} - 1} \right)/\left( {a_{j} + 1} \right)}} \end{matrix} & \text{(Eq.~~27a)} \end{matrix}$

[0170] This encoding results in qv_(j) values which require 7 bits for transmission in full frames and 6 bits for transmission in half frames.

[0171] The process for quantizing and encoding RC₂ through RC₅ is given below: $\begin{matrix} \begin{matrix} {{RC}_{j} = \quad {{Maximum}\left( {{LoClamp}_{j},{RC}_{j}} \right)}} \\ {{RC}_{j} = \quad {{Minimum}\left( {{HiClamp}_{j},{RC}_{j}} \right)}} \\ {{qv}_{j} = \quad \left\{ {{Integer}\left( {\left( {{2**{BitsFull}_{j}} - 1} \right)*{\left( {{RC}_{j} - {LoClamp}_{j}} \right)/}} \right.} \right.} \\ {\left. \quad \left( {{HiClamp}_{j} - {LoClamp}_{j}} \right) \right)\quad {for}\quad {full}\quad {frames}} \\ {\quad \left\{ {{Integer}\left( {\left( {{2**{BitsHalf}_{j}} - 1} \right)*{\left( {{RC}_{j} - {LoClamp}_{j}} \right)/}} \right.} \right.} \\ {\left. \quad \left( {{HiClamp}_{j} - {LoClamp}_{j}} \right) \right)\quad {for}\quad {half}\quad {frames}} \\ {{qRC}_{j} = \quad \left\{ {{LoClamp}_{j} + {\left( {{HiClamp}_{j} - {LoClamp}_{j}} \right)*{\left( {{qv}_{j} + {.5}} \right)/}}} \right.} \\ {\quad \left( {{2**{BitsFull}_{j}} - 1} \right)} \\ {\quad \left\{ {{for}\quad {full}\quad {frames}} \right.} \\ {\quad \left\{ {{LoClamp}_{j} + {\left( {{HiClamp}_{j} - {LoClamp}_{j}} \right)*{\left( {{qv}_{j} + {.5}} \right)/}}} \right.} \\ {\quad \left( {{2**{BitsHalf}_{j}} - 1} \right)} \\ {\quad \left\{ {{for}\quad {half}\quad {frames}} \right.} \end{matrix} & \text{(Eq.~~27b)} \end{matrix}$

[0172] This encoding results in qv_(j)values which require BitsFull_(j)bits for transmission in full frames and BitsHalf_(j)bits for transmission in half frames.

[0173] The process for quantizing and encoding RC₆ through RC₁₁ is given below: $\begin{matrix} \begin{matrix} {{RC}_{j} = \quad {{Maximum}\left( {{LoClamp}_{j},{RC}_{j}} \right)}} \\ {{RC}_{j} = \quad {{Minimum}\left( {{HiClamp}_{j},{RC}_{j}} \right)}} \\ {{qv}_{j} = \quad \left\{ {{Integer}\left( {\left( {{2**{BitsFull}_{j}} - 1} \right)*{\left( {{RC}_{j} - {LoClamp}_{j}} \right)/}} \right.} \right.} \\ {\quad \left. \left( {{HiClamp}_{j} - {LoClamp}_{j}} \right) \right)} \\ {\quad \left\{ {{for}\quad {full}\quad {frames}} \right.} \\ {\quad \left\{ {0\quad {for}\quad {half}\quad {frames}} \right.} \\ {{qRC}_{j} = \quad \left\{ {{LoClamp}_{j} + {\left( {{HiClamp}_{j} - {LoClamp}_{j}} \right)*{\left( {{qv}_{j} + {.5}} \right)/}}} \right.} \\ {\quad \left( {{2**{BitsFull}_{j}} - 1} \right)} \\ {\quad \left\{ {{for}\quad {full}\quad {frames}} \right.} \\ {\quad \left\{ {0\quad {for}\quad {half}\quad {frames}} \right.} \end{matrix} & \text{(Eq.~~27c)} \end{matrix}$

[0174] This encoding results in qv_(j) values which require BitsFull_(j) bits for transmission in full frames and 0 bits for transmission in half frames.

[0175] The reconstructed quantized RCs {qRC_(j), for j=0 to 11} are passed RC Priority Logic 41 and to Secondary Epoch Analysis 50. The encoded values {qv_(j), for j−0 to 11} are passed to Frame Assembly unit 60.

[0176] RC Priority Logic 41 determines the importance of the RCs in a particular frame to the quality of the reconstructed speech at the Decoder. In one embodiment frames are assigned a priority in the range 0 to 15. Frames with minimal importance are assigned a priority of 15, while frames of greatest importance are assigned a priority of 0. The RC Priority Logic computes two measures of distance on the qRCs: rcdif and rcdif0. The distance is computed between the current frame and last frame that would have been transmitted to the Decoder when only priorities of 2 or less are transmitted. Whenever a frame is encountered that is assigned a priority of 2 or less its {qRC_(j)} and {qv_(j)} values become the reference set {ref_qRC_(j)} and {ref_qv_(j)} for computing distance and hence priorities in succeeding frames. The distance measures are computed as follows: $\begin{matrix} {{rcdif} = {\sum\limits_{k = 0}^{11}\left| {{q\quad v_{k}} - {{ref\_ q}\quad v_{k}}} \right|}} & \left( {{Eq}.\quad 28} \right) \end{matrix}$

 rcdif0=|qRC ₀−ref_(—) qRC ₀|  (Eq. 29)

[0177] Priority Logic 41 then employs an empirically derived constant RCDropTH which is used to tune the overall data rate range of the system. In one embodiment RCDropTH is set to 110 which results in average channel data rates on typical telephone conversations of approximately 1600 bps when only parameters with priority of 2 or less are transmitted and average rates of approximately 3200 bps when all parameters are transmitted through the channel. The priority value to be assigned to RCs in the current frame is determined as follows:

[0178] Rcdimport=rcdif/RCDropTH

[0179] Rc0import=rcdif0/(RCDropTH/700)

[0180] Rcimport={Maximum(Rcdimport, Rc0import) if LogRMS>RMSThold

[0181] {Rcdimport otherwise

[0182] Rcpriority=(2+15* (1-Rcimport))

[0183] Rcpriority=Maximum (2, Rcpriority)

[0184] Rcpriority=Minimum (15, Rcpriority)

[0185] If (current frame is full and previous frame was half OR current frame is half and previous frame was full) $\begin{matrix} \begin{matrix} {{Rcpriority} = \quad \begin{matrix} \left\{ 1 \right. & {{{if}\quad L\quad o\quad g\quad R\quad M\quad S}<={R\quad M\quad S\quad T\quad h\quad o\quad l\quad d}} \end{matrix}} \\ {\quad \begin{matrix} \left\{ 0 \right. & {otherwise} \end{matrix}} \end{matrix} & \left( {{Eq}.\quad 30} \right) \end{matrix}$

[0186] The Rcpriority is forwarded to the Frame Assembly unit 60.

[0187] Secondary Epoch Analysis 50 computes a Residue Descriptor parameter that is transmitted in full frames only and acts as a fine tuning of the Epoch Length by controlling the position at which the Decoder places the excitation pulse in the reconstructed Epoch's excitation.

[0188] Secondary Epoch Analysis 50 proceeds as shown in FIG. 5 in which the quantized RCs {qRC_(j)} as computed by Quantize RCs process 40 are converted to predictor coefficients {pc_(j); for j=0, . . . ,11} by Convert RCs to PCs operation 51. This operation is carried out as follows: $\begin{matrix} {{{{pc}_{0} = {qRC}_{0}};}{{{for}\left( {{i = 1};{i < 12};{i++}} \right)}\left\{ {{{{{for}\left( {{j = 0};{j < i};{j++}} \right)}\quad {temp}_{j}} = {{pc}_{j} - {{qRC}_{i}*{pc}_{i - j - 1}}}};{{{{for}\left( {{j = 0};{j < i};{j++}} \right)}{pc}_{j}} = {temp}_{j}};{{pc}_{i} = {qRC}_{i}};} \right\}}} & \left( {{Eq}.\quad 31} \right) \end{matrix}$

[0189] The predictor coefficients are then used to inverse filter the Bias Removed Epoch Samples {e_(k)} to produce a residue signal {r_(k)}. This is accomplished in Perform Inverse Filter operation 52 as follows:

[0190] $\begin{matrix} {{r_{k} = {e_{k} - {\sum\limits_{j = 0}^{11}{{pc}_{j}*e_{k - j - 1}}}}}{{{{for}\quad k} = 12},13,,{{{Actual\_ Epoch}{\_ Length}} + 11}}} & \left( {{Eq}.\quad 32} \right) \end{matrix}$

[0191] The residue {r_(k)} represents the excitation signal required to drive a filter built with the predictor coefficients to reconstruct the input signal. The Decoder will attempt to approximate this residue in the process of reconstructing the speech. The only parameter derived from the residue is and estimate of the location of the pulse within the epoch. This is determined as follows by Locate Peak function 53:

[0192] ResPeak=0;

[0193] PeakLoc=0;

[0194] for (j=0; j<Actual_Epoch_Length; j++)

[0195] if(−r_(j)>ResPeak){ResPeak=−r_(j); PeakLoc=j;}

[0196] The Peak location, PeakLoc, is encoded for transmission in 4 bits by the following actions in Encode Peak Location operation 54: If(PeakLoc > Actual_Epoch_Length/2) $\begin{matrix} {{ResDesc} = \quad \left\{ {{PeakLoc} - {{Actual\_ Epoch}{\_ Length}}} \right.} \\ {\quad {{{If}\quad {PeakLoc}} > {{Actual\_ Epoch}{{\_ Length}/2}}}} \\ {\quad \left\{ {{PeakLoc}\quad {otherwise}} \right.} \\ {{ResDesc} = \quad {{Maximum}\left( {{ResDesc},{- 7}} \right)}} \\ {{ResDesc} = \quad {{Minimum}\left( {{ResDesc},8} \right)}} \\ {{ResDesc} = \quad {{ResDesc} + 7}} \end{matrix}$

[0197] The resulting range for ResDesc is 0 to 15, which can be encoded in 4 bits. ResDesc is forwarded to Frame Assembly unit 60 where it assumes the priority, Rcpriority, from Eq. 30. Its number of bits will be 4 in full frames and 0 in half frames.

[0198] Frame Assembly unit 60 of FIG. 1 is the final Encoder operation in preparing a frame of data for transmission. Two modes of operation are possible for this module depending on whether or not a network traffic management function is co-resident with the Encoder or remotely located.

[0199] In the case of a co-resident traffic manager (e.g. a traffic manager to which the Encoder communicates over a high bandwidth channel) the Frame Assembly process assembles into a standard format and forwards parameter values, parameter encoding specifications (number of bits per parameter) and parameter priorities to the traffic manager. The speech data in this format requires approximately 56 kbps for transmission to the traffic manager. The traffic manager then selects a priority level that provides the maximum output speech quality for the available bandwidth. After a priority has been selected, the traffic manager selects only those bits corresponding to encoded parameter values with priorities at or below the requested priority value for transmission.

[0200] The priorities themselves and the number of bits per parameter are not forwarded over the channel. The resulting transmission data rate varies from about 1600 bps to 3200 bps depending on the priority level employed. There are many factors beyond the scope of the present invention that may be brought to bear in setting the available bandwidth for a given speech channel. They include network congestion, bandwidth cost, and the channel user's requested (contracted for) quality of service. It will be appreciated that in one embodiment the priority level governing transmission rate may be dynamically varied from frame to frame to meet rapidly changing network conditions.

[0201] In the case of a remotely located traffic manager, the traffic manager forwards a requested priority level to the Encoder, which then performs the bit stripping and packing operation itself to produce a low-rate bit stream for transmission. Since this bit stream no longer has priority information included, the network cannot further modify it.

[0202] A standard format frame with priority and bit size information included is a block of 64 bytes laid out as in Table 4 below which gives the possible values for each byte in the frame. TABLE 4 Possible Values for Each Entry in Parameter Frame Parameter Name Priority # Bits Value Include RCs:IRC 0 1 0, 1 EpochLen Delta 0 3 0 -> 7 Flag:EDF RMS Delta 0 2 0 -> 3 Flag:RDF EpochLength 0 0, 8 0 -> 255 RMS 0 0, 5 0 -> 31 RC1 0 -> 15 6, 7 0 -> 127 RC2 0 -> 15 6, 7 0 -> 127 RC3 0 -> 15 5, 6 0 -> 63 RC4 0 -> 15 5, 6 0 -> 63 RC5 0 -> 15 4, 5 0 -> 31 RC6 0 -> 15 4, 5 0 -> 31 RC7 0 -> 15 0, 4 0 -> 15 RC8 0 -> 15 0, 4 0 -> 15 RC9 0 -> 15 0, 4 0 -> 15 RC10 0 -> 15 0, 4 0 -> 15 RC11 0 -> 15 0, 3 0 -> 7 RC12 0 -> 15 0, 3 0 -> 7 ResDesc 0 -> 15 0, 4 0 -> 15 Unused 0 0 0 Unused 0 0 0 Unused 0 0 0 Unused 0 0 0

[0203] Each of the parameters listed in Table 4 corresponds to some number of bits which may or may not be included the bit stream sent to the Decoder. The designation 0-bits implies that the parameter is not sent at all. The Include RC Flag (IRC) is initially set to 1. When the traffic manager (or Encoder) “drops” RCs based on their priority level the IRC bit is set to 0 to flag the absence of the RCs for the given frame. Note that all RCs and the RescDesc within a given frame have the same priority number, thus all are kept or dropped as a group.

[0204] In the case of a remote traffic manager, which has supplied a particular priority level to the Encoder, the following operations are performed in the Encoder to produce the bits sent to the digital transmission medium. These same operations are performed by a co-resident traffic manager operating on the 64 byte frame block.

[0205] The Encoder first compares the priority assigned to the RCs and ResDesc in the frame to the requested (or allowed) priority for transmission. If the priority for the RCs for this frame is less than or equal to the requested priority all RCs are to be retained. If the priority for the RCs for this frame is greater than the requested priority all RCs are to be dropped. This determines the value of the IRC bit. Conversion from the frame structure to a bit stream then proceeds from top to bottom in the 64 bytes frame examining each triplet of priority, #bits, and value. If priority is greater than the requested priority the triplet is skipped. If priority is less than or equal to the requested priority the number of bits specified by the # Bits column are extracted from the low end of the Value byte and forwarded to the bit stream. FIG. 9 summarizes the structure of the resulting bit stream. It will be appreciated that this translation in this order to the bit stream results in a bit stream which is uniquely decodable at the receiving end into the individual parameters as discussed below under the Decoder operation. It will also be appreciated that there are other arrangements of the bits which provide unique decodability and may be advantageous in certain other implementations. In particular in environments with noticeable error rates imparted by the digital transmission medium, it will be advantageous to encode the IRC, EDF, RDF, and first bit of RC1 with error detection and correction codes to ensure rapid recovery of frame synchronization after channel errors occur.

[0206]FIG. 2 illustrates a block diagram of a Decoder in one embodiment of the invention. The Decoder consists of Frame Disassembly and Decoding unit 100 to reconstruct parameters from the digital bit stream, Excitation Generator 110 to construct an excitation signal, Synthesizing Filter 130 to filter excitation signal 122 producing Raw Output Signal 136, and Output Scaling and Filtering unit 140 to transform Raw Output Signal 136 into final Output Audio 148. At the receiving (decompression) side the Decoder reconstructs each frame of (typically) 15 parameters for each channel, flags the parameters that are missing (were not sent due to bandwidth limitations over the Frame Relay link), and presents the frame to a Synthesizer for reconstruction of the speech.

[0207] Frame Disassembly and Decoding unit 100 accepts the incoming bit stream, disassembles it into individual frames and individual parameters within each frame and decodes those parameters into formats useful for synthesis of speech corresponding to the input Epoch.

[0208] The first task in Frame Disassembly is the identification of the total length of the frame and the location of individual parameters in the frame's bit stream. To this end, with reference to the structures displayed in FIG. 9, the IRC bit is first examined to determine the presence or absence of RC Block. The next 3 bits are the EDF(Epoch Length Delta Flag). If the EDF is 7 there are 8 bits of Encoded Epoch Length following the RDF. The next 2 bits are the RDF (RMS Delta Flag). If the RDF is 3, then the RMS absolute value is included as 5 bits following either the Epoch Length (if present) or the RDF (if no Epoch Length). These operations have established the length and structure of the ER Header (Epoch_Length RMS Header). The values in the ER Header are now decoded as follows:

[0209] Epoch Length=previous Epoch Length+EDF−3 if EDF<7

[0210] Epoch Length=ELcode if EDF=7 and 16<=ELcode<=200

[0211] Epoch Length=ELcode+231 if EDF=7 and ELcode<16

[0212] Epoch Length=ELcode+46 if EDF=7 and ELcode >200

LogRMS=previous LogRMS+RDF−1 if RDF<3

LogRMS=RMScode if RDF=3  (Eq. 33)

[0213] If the IRC bit is 0, the frame ends with the ER Header. Otherwise the frame contains an RC Block with length and format established by the value of the decoded LogRMS and the value of the first bit in the RC Block, which is the sign bit of RC₀. If the LogRMS is greater than the RMSThold (as described in conjunction with Eq. 26a above) and the first bit of the RC Block is 0, the RC Block is a full frame containing 62 bits laid out as illustrated in FIG. 9. If the LogRMS is less than or equal to the RMSThold or the first bit of the RC Block is 1, the RC Block is a half frame containing 30 bits laid out as illustrated in FIG. 9.

[0214] The individual RCs if present in the frame are decoded from their transmitted values {qv_(j)} to produce the set {qRC_(j)} according to Eqs. 27a, 27b, and 27c above.

[0215] The LogRMS is decoded into a linear RMS approximation by using the LogRMS value (an integer on [0,31]) as an index into the following table: TABLE 5 LogRMS 0 1 2 3 4 5 6 7 RMS 0 1 2 3 4 5 6 7 LogRMS 8 9 10 11 12 13 14 15 RMS 9 12 15 21 27 35 43 57 LogRMS 16 17 18 19 20 21 22 23 RMS 73 94 126 160 204 267 346 454 LogRMS 24 25 26 27 28 29 30 31 RMS 587 756 984 1,245 1,606 2,072 2,646 3,387

[0216] The Epoch Length, RMS, and decoded RCs, {qRC_(j)}, along with a flag indicating if the RCs are present or not are passed to Excitation Generator 110, Synthesizing Filter 130, and Output Scaling and Filtering 140 as illustrated in FIG. 2.

[0217] Excitation Generator 100 illustrated in FIG. 6 begins by decoding the Epoch Length in Decode Epoch Length function 120 to determine the actual number of samples in the Epoch and whether or not the Epoch is a Double. This is accomplished as follows: $\begin{matrix} {\begin{matrix} {{{Actual\_ Epoch}{\_ Length}} = \quad {\begin{matrix} \left\{ {{Epoch}\quad {Length}} \right. & {{if}\quad {Epoch}\quad {Length}} \end{matrix}<=200}} \\ {\quad \left\{ {{{Epoch}\quad {Length}} - {200\quad {otherwise}}} \right.} \\ {{{Double}\quad {Epoch}\quad {Flag}} = \quad \begin{matrix} \left\{ {False} \right. & {{{if}\quad {Epoch}\quad {Length}}<=200} \end{matrix}} \\ {\quad \begin{matrix} \left\{ {True} \right. & {otherwise} \end{matrix}} \end{matrix}\quad} & \left( {{Eq}.\quad 34} \right) \end{matrix}$

[0218] Excitation Generator 100 then executes Calculate Epoch Length Dispersion function 111 to calculate an EpochLength Consistency factor that measures the consistency versus dispersion of the successive epoch lengths as follows: $\begin{matrix} {\begin{matrix} {{{True}\quad {Epoch}\quad {Length}} = \quad \begin{matrix} \left\{ {{Actual\_ Epoch}{\_ Length}} \right. & {{if}\quad {Double}\quad {Flag}\quad {is}\quad {False}} \end{matrix}} \\ {\quad \begin{matrix} \left\{ {\left( {{Actual\_ Epoch}{\_ Length}} \right)/2} \right. & {otherwise} \end{matrix}} \\ {{d1} = \quad \left\{ \left| {{Log}\left( {{Previous}\quad {True}\quad {Epoch}\quad {{Length}/{True}}\quad {Epoch}\quad {Length}} \right)} \right| \right.} \\ {\quad {\begin{matrix} \{ & {{if}\quad {True}\quad {Epoch}\quad {Length}} \end{matrix} < {200\quad {and}}}} \\ {\quad {\begin{matrix} \{ & {{Previous}\quad {True}\quad {Epoch}\quad {Length}} \end{matrix} < 200}} \\ {\quad \begin{matrix} \left\{ 2.5 \right. & {otherwise} \end{matrix}} \\ {{dispersion} = \quad {{{Previous}\quad {d1}} + {d1}}} \\ {{{Epoch}\quad {Length}\quad {Consistency}} = \quad \begin{matrix} \left\{ {1 - \left( {{dispersion}/2} \right)} \right. & {{{if}\quad {dispersion}} < 2.0} \end{matrix}} \\ {\quad \begin{matrix} \left\{ 0 \right. & {otherwise} \end{matrix}} \end{matrix}\quad} & \left( {{Eq}.\quad 35} \right) \end{matrix}$

[0219] The EpochLength Consistency factor has values near 1.0 for voiced signals and near 0 for unvoiced signals.

[0220] The Raw Mixing Fraction is computed in Estimate Mixing Fraction operation 112 from the first RC, RC₀, as follows: $\begin{matrix} {\begin{matrix} {{Alpha} =} & {\quad \left\{ {.9} \right.} & {\quad {{{if}\quad {RC}_{0}}>=0.2}} \\ \quad & {\quad \left\{ {\left( {{RC}_{0} + 0.4} \right)*1.5} \right.} & {\quad {{{if}\quad - 0.4} < {RC}_{0} < 0.2}} \\ \quad & {\quad \left\{ 0 \right.} & {\quad {else}} \end{matrix}{\quad {{{Raw}\quad {Mixing}\quad {Fraction}} = {\left( {{Alpha} + {{Previous}\quad {Alpha}}} \right)/2}}}} & \left( {{Eq}.\quad 36} \right) \end{matrix}$

[0221] The Raw Mixing Fraction has values near 1.0 for voiced signals and near 0 for unvoiced signals.

[0222] Refine Mixing Fraction operation 113 combines the Raw Mixing Fraction and EpochLength Consistency to produce a Mixing Fraction as follows: $\begin{matrix} {\begin{matrix} {\quad \left\{ {\left( {{Epoch}\quad {Length}\quad {Consistency}} \right)*\left( {{Raw}\quad {Mixing}\quad {Fraction}} \right)} \right.} \\ {\quad \begin{matrix} \{ & {\quad {{{if}\quad {Raw}\quad {Mixing}\quad {Fraction}} < 0.8}} \end{matrix}} \\ {{{Mixing}\quad {Fraction}} = \quad \left\{ {\left( {{Epoch}\quad {Length}\quad {Consistency}} \right)*\left( {{{Raw}\quad {Mixing}\quad {Fraction}} + 0.2} \right)} \right.} \\ {\quad \begin{matrix} \{ & {\quad {{{if}\quad 0.8} < {{Raw}\quad {Mixing}\quad {Fraction}}{< =}0.9}} \end{matrix}} \\ {\quad \left\{ {\left( {{Epoch}\quad {Length}\quad {Consistency}} \right)*\left( {{{Raw}\quad {Mixing}\quad {Fraction}} + 0.4} \right)} \right.} \\ {\quad \begin{matrix} \{ & {\quad {{{if}\quad 0.9} < {{Raw}\quad {Mixing}\quad {Fraction}}}} \end{matrix}} \end{matrix}\quad} & \left( {{Eq}.\quad 37} \right) \end{matrix}$

[0223] The pulse portion of the excitation is created by first selecting the final 12 points of the previous unshaped synthesized audio signal {Un} described below. This signal, which is used to provide history to Synthesizing filter 133, needs to be adjusted by the relative gain levels of the previous and current epochs. This is accomplished in Scale Tail of Excitation from Previous Epoch 114 as follows: $\begin{matrix} {\begin{matrix} {{Tail\_ scale} = \left\{ {P\quad r\quad e\quad v\quad i\quad o\quad u\quad s\quad R\quad M\quad {S/R}\quad M\quad S} \right.} & {{{if}\quad P\quad r\quad e\quad v\quad i\quad o\quad u\quad s\quad R\quad M\quad {S/R}\quad M\quad S}<=4.0} \\ \left\{ {4.0f} \right. & {otherwise} \\ {{exc}_{j} = {{Tail\_ scale}*{previous\_ exc}_{{{PreviousActual\_ Epoch}{\_ Length}} + j}}} & {{j = 0},1,\ldots \quad,11} \end{matrix}\quad} & \left( {{Eq}.\quad 38} \right) \end{matrix}$

[0224] Next a fixed shape excitation pulse is used to provide the body of the pulse portion of the excitation in Copy Single or Double Pulse operation 115. To this end a fixed excitation source signal, dkexc_(k)}, is stored in advance as: $\begin{matrix} {\begin{matrix} {{d\quad k\quad e\quad x\quad c_{k}} = \quad \begin{matrix} \left\{ \left( {{- 98},{- 66},{- 130},{- 9},{- 233},174,{- 537},558,{- 741},104} \right) \right. & {{k = 0},{\ldots \quad 9}} \end{matrix}} \\ {\quad \begin{matrix} \left\{ \left( {477,{- 578},{- 669},{- 5},554,643,443,200,70,29} \right) \right. & {{k = 10},{\ldots \quad 19}} \end{matrix}} \\ {\quad \left\{ \left( {13,{- 29},{- 83},{- 126},{- 81}} \right) \right.} \\ {{k = \quad 20},{\ldots \quad 24}} \\ {\quad \begin{matrix} \left\{ \left( {0,0,\ldots \quad,0} \right) \right. & {{k = 25},{\ldots \quad 199}} \end{matrix}} \end{matrix}\quad} & \left( {{Eq}.\quad 39} \right) \end{matrix}$

[0225] The excitation signal {exe_(j)} is the filled in according to: $\begin{matrix} {\underset{\_}{{If}\quad {Double}\quad {Flag}\quad {is}\quad {False}}{{\begin{matrix} {{exc}_{j + 12} = {dkexc}_{j}} & {{j = 0},\ldots \quad,} \end{matrix}{Actual\_ Epoch}{\_ Length}} - 1}\underset{\_}{{If}\quad {Double}\quad {Flag}\quad {is}\quad {True}}{{Half1} = {{Integer}\left( {\left( {{Actual\_ Epoch}{\_ Length}} \right)/2} \right)}}{\begin{matrix} {{exc}_{j + 12} = {dkexc}_{j}} & {{j = 0},\ldots \quad,{{Half1} - 1}} \\ {{exc}_{j + 12 + {Half1}} = {dkexc}_{j}} & {{j = 0},\ldots \quad,{{{Actual\_ Epoch}{\_ Length}} - {Half1} - 1}} \end{matrix}\quad}} & \left( {{Eq}.\quad 40} \right) \end{matrix}$

[0226] Remove DC Bias operation 116 then removes any DC Bias from the non-tail portion of the pulse excitation as follows:

[0227] Actual_Epoch_Length−1 $\begin{matrix} {{{exc}_{j + 12} = {{exc}_{j + 12} - {\left( {1/\left( {{Actual\_ Epoch}{\_ Length}} \right)} \right){\sum\limits_{k = 0}{exc}_{k + 12}}}}}{{{{for}\quad j} = 0},,{{{Actual\_ Epoch}{\_ Length}} - 1}}} & \left( {{Eq}.\quad 41} \right) \end{matrix}$

[0228] Time Shift operation 117 employs the Residue Descriptor information to shift the location of the pulse(s) in the excitation to more nearly match the pulse alignment within the epoch in the original residue in the Encoder as follows using a circular shift:

exc _(j+12) =exc _((j+12+ResDesc+2) mod (Actual Epoch Length))  (Eq. 42)

[0229] This completes the creation of the pulsed portion of the excitation. In one embodiment the noise portion of the excitation {uvn_(k)} is created using a Random Number Generator Rrnd( ) that generates numbers uniformly distributed on the range (−32768, +32767).

uvn _(k) =Rrand( )/256 for k=0, . . . ,Actual_Epoch_Length−1  (Eq. 43)

[0230] Any convenient Random Number Generator with suitable properties may be used, an exemplary Random Number Generator based on Knuth, D., The Art of Computer Programming, Fundamental Algorithms, Vol. 2, p. 27, Addisson-Wesley, New York, 1998, is given in C programming code by: $\begin{matrix} {\begin{matrix} {\quad {i\quad n\quad t\quad R\quad r\quad a\quad n\quad {d(\quad)}}} \\ {\quad\{} \\ {\quad {i\quad n\quad t\quad {the\_ random}}} \\ {\quad {{{static}\quad {short}\quad {y\lbrack 5\rbrack}} = \left\{ {{- 21161},{- 8478},30892,{- 10216},16950} \right\}}} \\ {\quad {{{{static}\quad {int}\quad j} = 1},{{k = 4};}}} \\ {\quad {{{/^{*}{The}}\quad {following}\quad {is}\quad a\quad 16\quad {bit}\quad {2'}s\quad {complement}\quad {addition}},}} \\ {\quad {{with}\quad {overflow}\quad {checking}\quad {{disabled}^{*}/}}} \\ {\quad {{{y\lbrack k\rbrack}+={y\lbrack j\rbrack}};}} \\ {\quad {{{{if}\quad \left( {{y\lbrack k\rbrack} > 32767} \right){y\lbrack k\rbrack}} = {- \left( {32768 - \left( {{{y\lbrack k\rbrack}\&}32767} \right)} \right)}};}} \\ {\quad {{{{if}\quad \left( {{y\lbrack k\rbrack} < {- 32768}} \right){y\lbrack k\rbrack}} = {{{y\lbrack k\rbrack}\&}32767}};}} \\ {\quad {{{the\_ random} = {y\lbrack k\rbrack}};}} \\ {\quad {{k\text{--}};{{{if}\quad \left( {k > 0} \right)k} = 4};}} \\ {\quad {{j\text{--}};{{{if}\quad \left( {j < 0} \right)j} = 4};}} \\ {\quad {{{return}({the\_ random})};}} \\ \left. \quad \right\} \end{matrix}\quad} & \left( {{Eq}.\quad 44} \right) \end{matrix}$

[0231] Final excitation signal 122 is created from the noise signal {uvn_(k)} and pulse portion {exc_(k)} via scaling 119,120 and a summing operation 121 as follows: $\begin{matrix} {{{exc}_{j + 12} = {{{Mixing}\quad {Fraction}*{exc}_{j + 12}} + {\left( {1 - {{Mixing}\quad {Fraction}}} \right)*{uvn}_{j}}}}{{{{for}\quad j} = 0},\ldots \quad,{{{Actual\_ Epoch}{\_ Length}} - 1}}} & \left( {{Eq}.\quad 45} \right) \end{matrix}$

[0232] Synthesizing Filter 130 is illustrated in FIG. 7 where the first operation, Convert RCs to PCs 131, is accomplished using the technique in the Encoder's Secondary Analysis as specified in Eq. 31. The predictor coefficients, {pc_(j), j=0, . . . ,11} are then employed in Apply PC Filter to Excitation operation 133 to filter Excitaiton Signal 122 thus producing Unshaped Synthesized Audio Signal, {U_(n)} 134, according to the following equation: $\begin{matrix} {{U_{n} = {{{exc}_{n + 12} + {\sum\limits_{j = 0}^{11}\quad {{pc}_{j}*{EXC}_{n + 12 - j - 1}\quad {for}\quad n}}} = 0}},,{{{Actual\_ Epoch}{\_ Length}} - 1}} & \left( {{Eq}.\quad 46} \right) \end{matrix}$

[0233] Unshaped Synthesized Audio Signal, {U_(n)} 134, is then subjected to a filter with fixed coefficients which boosts low frequencies in Low Frequency Spectral Shaping Filter, 135, to produce Raw Output Signal {ros_(n)} 136 as follows: $\begin{matrix} {{{{ros}_{n} = {U_{n} - {2.39399*U_{n - 1}} + {2.249895*U_{n - 2}} - {0.967*U_{n - 3}} + {0.1681*U_{n - 4}} + {2.40557*{ros}_{n - 1}} - {2.233958*{ros}_{n - 2}} + {0.9051*{ros}_{n - 3}} - {0.1336*{ros}_{n - 4}}}}\quad {{{{for}\quad n} = 0},\ldots \quad,{{{Actual\_ Epoch}{\_ Length}} - 1}}}\quad} & \left( {{Eq}.\quad 47} \right) \end{matrix}$

[0234] Output Scaling and Filtering operation 140 is illustrated in FIG. 8 in which the first operation, Compute RMS of Raw Output Signal 141, proceeds to compute Rosrms as follows: $\begin{matrix} {{Rosrms} = {\quad{\left\lbrack {{\left( {\sum\limits_{n = 0}^{{{Actual\_ Epoch}{\_ Length}} - 1}\quad {{ros}_{n}*{ros}_{n}}} \right)/{Actual\_ Epoch}}{\_ Length}} \right\rbrack -}}} & \left( {{Eq}.\quad 48} \right) \end{matrix}$

[0235] Compute RMS Scale Factor operation 143 then computes a gain for the current epoch from the input RMS and the Rosrms as follows:

Gain=RMS/Rosrms  (Eq. 49)

[0236] The Raw Output Signal is then scaled by the Gain in the operation at 145 to produce the signal {gr_(n)}via:

gr _(n)=Gain*ros_(n) for n=0, . . . ,Actual_Epoch_Length −1  (Eq. 50)

[0237] The Gain scaled signal, {gr_(n)}, is then filtered by Low Pass Filter 147 to produce final Output Audio, {O_(n)} 148, according to the following equation:

O _(n)=0.4*gr _(n)+0.2*gr _(n−1)+0.5*O _(n−1) for n=0, . . . , Actual_Epoch_Length−1  (Eq. 51)

[0238] The output audio signal can then be forwarded to various mechanisms, such as a Digital to Analog (D/A) converter, amplifier, and speaker, that present the signal to a receiving end-user.

[0239] Therefore, a mechanism by which traffic management systems external to an embodiment may meet the needs of rapidly changing network conditions by dynamically varying the bandwidth allocated to a given channel of signal activity, such as speech, or audio activity, with predictable influence on the quality of the reconstructed (received) signal. The present invention can support Quality of Service (QoS) protocols in which end-users trade-off speech quality versus cost of service.

[0240] Further, the present invention flags portions of the digital signal as deletable from the bit stream and identifies the effects that each such deletion will have on the output speech quality.

[0241] Thus, by meeting the demands of a transmission medium's dynamically changing bandwidth (of transmission rates) by compressing signals in accordance with the dynamically changing bandwidth, communication over the medium is carried out in a manner that maximizes the quality of the reconstructed signal.

[0242] The above embodiments can also be stored on a device or medium and read by a machine to perform instructions. The device or medium may include a solid state memory device and/or a rotating magnetic or optical disk. The device or medium may be distributed when partitions of instructions have been separated into different machines, such as across an interconnection of computers.

[0243] While certain exemplary embodiments have been described and shown in the accompanying drawings, it is to be understood that such embodiments are merely illustrative of and not restrictive on the broad invention, and that this invention not be limited to the specific constructions and arrangements shown and described, since various other modifications may occur to those ordinarily skilled in the art. 

1. An apparatus comprising: an encoder, the encoder to compress a plurality of signals at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual signal quality.
 2. The apparatus of claim 1, wherein a transmission rate of the plurality of compressed signals is dynamically set.
 3. The apparatus of claim 1, wherein the plurality of compressed signals are speech signals.
 4. The apparatus of claim 1, wherein the encoder comprises: an epoch locator unit; a first epoch analyzer; a second epoch analyzer; and a frame assembler unit.
 5. The apparatus of claim 4, wherein the plurality of compressed signals in one of half frames and full frames.
 6. The apparatus of claim 4, further including a network traffic manager coupled to the encoder.
 7. The apparatus of claim 6, wherein the network manager is one of co-resident with the encoder and remotely located relative to the encoder.
 8. The apparatus of claim 1, wherein a priority level of each of the plurality of prioritized parameters is based on quality of speech.
 9. An apparatus comprising: a decoder; and to decompress a plurality of compressed signals at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual signal quality.
 10. The apparatus of claim 9, wherein a transmission rate of the plurality of compressed signals is dynamically set.
 11. The apparatus of claim 9, wherein the plurality of compressed signals are speech signals.
 12. The apparatus of claim 9, wherein the decoder comprises: a frame disassembly and parameter decoding unit; an excitation generator; a synthesizing filter; and an output scaling and filtering unit.
 13. The apparatus of claim 9, wherein the plurality of compressed signals decompressed by the decoder at variable rates based on the plurality of prioritized parameters improve transmission during dynamically changing bandwidth while preserving perceptual quality of the signals.
 14. A program storage device readable by a machine comprising instructions that cause the machine to: receive a plurality of signals from a first transmission device; encode the plurality of signals in a compressed format; and transmit the plurality of signals in a compressed format through a transmission medium at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual quality of the signals.
 15. The program storage device of claim 14, wherein a transmission rate of the plurality of compressed signals is dynamically set.
 16. The program storage device of claim 14, wherein the plurality of signals in a compressed format are speech signals.
 17. The program storage device of claim 14, wherein encode instructions cause the machine to: locate an epoch; analyze a first epoch; analyze a second epoch; and assemble a frame.
 18. The program storage device of claim 17, wherein the transmit of the plurality of compressed signals is in one of a half frame and a full frame.
 19. The program storage device of claim 14, further comprising instructions that cause the machine to: prioritize each of the plurality of prioritized parameters based on quality of speech.
 20. A program storage device readable by a machine comprising instructions that cause the machine to: receive the plurality of signals in a compressed format through a transmission medium at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual quality of the signals; decode the plurality of compressed signals; and transmit the decoded signals to a first receiving device.
 21. The program storage device of claim 20, wherein a transmission rate of the plurality of compressed signals is dynamically set.
 22. The program storage device of claim 20, wherein the plurality of signals in a compressed format are speech signals.
 23. The program storage device of claim 20, wherein decode instructions cause the machine to: disassemble and parameter decode a frame; generate an excitation; synthesize and filter; and scale and filter an output.
 24. The program storage device of claim 20, wherein the receipt of the plurality of compressed signals at variable rates based on the plurality of prioritized parameters improves signal transmission during dynamically changing bandwidth of the transmission medium while preserving perceptual quality of the signals.
 25. The program storage device of claim 20, further comprising instructions that cause the machine to: prioritize each of the plurality of prioritized parameters based on quality of speech.
 26. A method comprising: receiving a plurality of signals from a transmission device; encoding the plurality of signals in a compressed format; and transmitting the plurality of signals in a compressed format through a transmission medium at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual quality of the signals.
 27. The method of claim 26, wherein the variable transmission rate of the plurality of compressed signals is dynamically set.
 28. The method of claim 26, wherein the plurality of signals in a compressed format are speech signals.
 29. The method of claim 26, wherein encoding comprises: locating an epoch; analyzing a first epoch; analyzing a second epoch; and assembling a frame.
 30. The method of claim 26, wherein the transmitting of the plurality of compressed signals is in one of a half frame and a full frame.
 31. The method of claim 26, further comprising: establishing a priority level of each of the plurality of prioritized parameters based on quality of speech.
 32. The method of claim 26, wherein the transmitting of the plurality of compressed signals at variable rates based on the plurality of prioritized parameters improves signal transmission during dynamically changing bandwidth of the transmission medium while preserving perceptual quality of the signals.
 33. A method comprising: receiving a plurality of signals in a compressed format through a transmission medium at variable rates based on a plurality of prioritized parameters to reduce signal bandwidth while preserving perceptual quality of the plurality of the signals; decoding the plurality of compressed signals; and transmitting the decoded signals to a receiving device.
 34. The method of claim 33, wherein the variable transmission rate of the plurality of compressed signals is dynamically set.
 35. The method of claim 33, wherein the plurality of signals in a compressed format are speech signals.
 36. The method of claim 33, wherein decoding comprises: disassembling and parameter decoding a frame; generating an excitation; synthesizing and filtering; and scaling and filtering an output.
 37. The method of claim 33, wherein the receiving the plurality of compressed signals at variable rates based on the plurality of prioritized parameters improves signal transmission during dynamically changing bandwidth of the transmission medium while preserving perceptual quality of the signals.
 38. The method of claim 33, wherein the receiving of the plurality of compressed signals is in one of a half frame and a full frame.
 39. The method of claim 33, wherein receiving comprises: prioritizing each of the plurality of prioritized parameters based on quality of speech. 